import {
  ADD_GOODS,
  INIT_SHOP_CART,
  REMOVE_CART,
  SELECTED_SINGER_GOODS,
  SELECTED_ALL_GOODS,
  CLEAR_CART,
  USER_INFO,
  INIT_USER_INFO
} from './mutations-type'
import { getStore, setStore } from './../config/global'
import Vue from 'vue'
export default {
  //1.往购物车中添加数据
  [ADD_GOODS](state, {goodsId, goodsName, goodsImage, goodsPrice}){
    let shopCart = state.shopCart;
    //1.1判断商品是否存在
    if(shopCart[goodsId]){
      shopCart[goodsId]['num']++;
    }else{
      shopCart[goodsId] = {
        "num": 1,
        "id" : goodsId,
        "name": goodsName,
        "small_image": goodsImage,
        "price": goodsPrice,
        "checked": true
      }
    }
    //1.2 产生新对象
    state.shopCart = {...shopCart};
    //1.3 存入本地
    setStore('shopCart', state.shopCart);
  },

  //2.页面初始化，获取购物车的数据(本地)
  [INIT_SHOP_CART](state){
    let initCart = getStore('shopCart');
    if(initCart){
      state.shopCart = JSON.parse(initCart);
    }
  },

  //3.把商品移出购物车
  [REMOVE_CART](state, {goodsId}){
    let shopCart = state.shopCart;  //拿到购物车所有商品
    let goods = shopCart[goodsId];
    if(goods){//找到该商品
      if(goods['num'] > 0){
        goods['num']--;
        //3.1 判断是否只有0个,
        if(goods['num'] === 0){ //如果是0就删掉
          delete shopCart[goodsId];
        }
      }else{
        goods = null;
      }
      // 3.2 同步数据
      state.shopCart = {...shopCart};
      setStore('shopCart', state.shopCart);
    }
  },

  //4.单个商品选中和取消选中
  [SELECTED_SINGER_GOODS](state, {goodsId}){
    let shopCart = state.shopCart;
    let goods = shopCart[goodsId];
    if(goods) {//商品存在
      if (goods.checked) {
        goods.checked = !goods.checked;
      } else {//在Vue中添加属性
        Vue.set(goods, 'checked', true);
      }
      // 4.1 同步数据
      state.shopCart = { ...shopCart };
      setStore('shopCart', state.shopCart);
    }
  },

  //5.所有商品选中和取消选中
  [SELECTED_ALL_GOODS](state, {isSelected}){
    let shopCart = state.shopCart;
    //5.1 遍历取值
    Object.values(shopCart).forEach((goods, index)=>{
      //5.2 判断checked是否存在
      if (goods.checked) {
        goods.checked = !isSelected;
      } else {
        Vue.set(goods, 'checked', !isSelected);
      }
    });
    // 5.3 同步数据
    state.shopCart = { ...shopCart };
  },

  //6.清空购物车
  [CLEAR_CART](state){
    state.shopCart = null;
    state.shopCart = {...state.shopCart};
    setStore('shopCart', state.shopCart);
  },

  //7.保存用户信息到本地
  [USER_INFO](state, {userInfo}){
    state.userInfo = userInfo;
    setStore('userInfo', state.userInfo);
  },

 //8.获取用户信息
  [INIT_USER_INFO](state){
    let userInfo = getStore('userInfo');
    if(userInfo){
      state.userInfo = JSON.parse( userInfo );
    }
  }
}
